Ansible এ ভ্যারিয়েবল (Variables) এবং ফ্যাক্ট (Facts) হলো দুটি গুরুত্বপূর্ণ উপাদান যা প্লেবুক, টেমপ্লেট, এবং রোলগুলোকে ডায়নামিক এবং ফ্লেক্সিবল করে তোলে। চলুন এই দুটি সম্পর্কে বিস্তারিতভাবে আলোচনা করি।
ভ্যারিয়েবল হলো ডায়নামিক ডেটা বা মান, যা Ansible Playbook বা টাস্কে ব্যবহৃত হয়। এর মাধ্যমে আপনি একই প্লেবুক বা টাস্ককে বিভিন্ন কনফিগারেশনে চালাতে পারেন, ভিন্ন ভিন্ন সার্ভারে ভিন্ন ভিন্ন মান প্রয়োগ করতে পারেন।
vars
সেকশন ব্যবহার করে ভ্যারিয়েবল ডিফাইন করা যায়।group_vars
ডিরেক্টরির মাধ্যমে।host_vars
ডিরেক্টরির মাধ্যমে।---
- name: Example Playbook with variables
hosts: webservers
vars:
apache_package: apache2
apache_service: apache2
tasks:
- name: Install Apache
apt:
name: "{{ apache_package }}"
state: present
- name: Start Apache service
service:
name: "{{ apache_service }}"
state: started
ব্যাখ্যা:
apache_package
এবং apache_service
নামে দুইটি ভ্যারিয়েবল ডিফাইন করা হয়েছে।{{ }}
সিঙ্কট্যাক্স দিয়ে ভ্যারিয়েবলগুলোর মান টেমপ্লেটের মতো কল করা হয়।ফ্যাক্ট হলো Ansible-এর মাধ্যমে সংগ্রহকৃত সিস্টেম সম্পর্কিত তথ্য। যখনই আপনি একটি প্লেবুক চালান, Ansible স্বয়ংক্রিয়ভাবে বিভিন্ন তথ্য সংগ্রহ করে, যেমন সিস্টেমের অপারেটিং সিস্টেম, আইপি অ্যাড্রেস, মেমোরি, ডিস্ক স্পেস ইত্যাদি। এই তথ্যগুলো ফ্যাক্টস নামে পরিচিত এবং এগুলি টাস্কে ডাইনামিকভাবে ব্যবহার করা যায়।
ansible_facts
ডিকশনারির মাধ্যমে, যেমন {{ ansible_facts['os_family'] }}
।---
- name: Example Playbook using facts
hosts: all
tasks:
- name: Display OS family
debug:
msg: "The OS family is {{ ansible_facts['os_family'] }}"
- name: Display total memory
debug:
msg: "The total memory is {{ ansible_facts['ansible_memtotal_mb'] }} MB"
ব্যাখ্যা:
ansible_facts['os_family']
ব্যবহার করে প্লেবুকটি সিস্টেমের অপারেটিং সিস্টেম ফ্যামিলি প্রদর্শন করছে (যেমন: Debian
, RedHat
ইত্যাদি)।ansible_facts['ansible_memtotal_mb']
ব্যবহার করে প্লেবুকটি সিস্টেমের মোট মেমোরি (MB তে) দেখাচ্ছে।বৈশিষ্ট্য | ভ্যারিয়েবল (Variables) | ফ্যাক্ট (Facts) |
---|---|---|
উৎস | YAML ফাইল, ইনভেন্টরি, বা প্লেবুকের মধ্যে | Ansible স্বয়ংক্রিয়ভাবে সংগ্রহ করে |
প্রকার | ব্যবহারকারী দ্বারা কাস্টম ডিফাইন করা ডেটা | সিস্টেম সম্পর্কিত ডাইনামিক তথ্য |
ব্যবহার | প্লেবুক, টাস্ক, টেমপ্লেট ডাইনামিক করতে | প্লেবুকে সিস্টেমের উপর ভিত্তি করে সিদ্ধান্ত নিতে |
ডায়নামিক নাকি স্ট্যাটিক | সাধারণত স্ট্যাটিক (কাস্টমাইজযোগ্য) | স্বয়ংক্রিয় এবং সম্পূর্ণ ডায়নামিক |
এই হলো Ansible এর ভ্যারিয়েবল এবং ফ্যাক্ট সম্পর্কে বেসিক ধারণা। এই দুটি উপাদান Ansible কে খুব ফ্লেক্সিবল এবং ডাইনামিক করে তোলে, যার মাধ্যমে প্লেবুক এবং টাস্ককে কাস্টমাইজ করা সহজ হয়।
Ansible এ ভ্যারিয়েবল হলো এমন কিছু নাম-মান (name-value) জোড়া যা প্লেবুক বা টাস্কে ব্যবহার করা হয়, যাতে কাজগুলোকে ডাইনামিক এবং পুনরায় ব্যবহারযোগ্য করা যায়। ভ্যারিয়েবল ব্যবহার করে আপনি সহজেই প্লেবুকের বিভিন্ন অংশে পরিবর্তন আনতে পারেন এবং নির্দিষ্ট কনফিগারেশন বা সেটআপকে কাস্টমাইজ করতে পারেন।
Ansible এ ভ্যারিয়েবল বিভিন্ন উপায়ে ব্যবহার করা যায়:
vars
সেকশন ব্যবহার করে ভ্যারিয়েবল সংজ্ঞায়িত করা যায়।--extra-vars
(বা -e
) অপশন দিয়ে ভ্যারিয়েবল পাস করা যায়।ভ্যারিয়েবল ডিফাইন করার জন্য YAML ফাইলে vars
সেকশন ব্যবহার করা হয়।
---
- name: Install and configure Apache
hosts: webservers
become: yes
vars:
apache_package: apache2
apache_service: apache2
apache_port: 80
tasks:
- name: Install Apache
apt:
name: "{{ apache_package }}"
state: present
- name: Start Apache service
service:
name: "{{ apache_service }}"
state: started
enabled: yes
- name: Open firewall port
ufw:
rule: allow
port: "{{ apache_port }}"
উপরের প্লেবুকে, apache_package
, apache_service
, এবং apache_port
নামে ভ্যারিয়েবল ব্যবহার করা হয়েছে। এগুলো প্লেবুকের বিভিন্ন স্থানে মান হিসাবে রেফারেন্স করা হয়েছে।
vars:
variable_name: value
2. গ্রুপ বা হোস্ট ভ্যারিয়েবল ফাইলে:
group_vars/all.yml
বা host_vars/hostname.yml
ফাইলে ভ্যারিয়েবল সংজ্ঞায়িত করা যায়।
3. কমান্ড লাইনে:
ansible-playbook playbook.yml -e "variable_name=value"
defaults/main.yml
ফাইলে ডিফল্ট ভ্যারিয়েবল সেট করা যায়, যা অন্যত্র ওভাররাইড করা যায়।Ansible এ ভ্যারিয়েবল হলো প্লেবুককে ডাইনামিক, পুনরায় ব্যবহারযোগ্য, এবং কাস্টমাইজযোগ্য করার জন্য একটি শক্তিশালী উপায়। এটি প্লেবুকের কোডকে সহজবোধ্য ও পরিষ্কার রাখে এবং বিভিন্ন পরিবেশ বা কনফিগারেশনের জন্য এক্সিকিউশন প্রক্রিয়াকে নমনীয় করে তোলে।
Ansible-এ হোস্ট ভ্যারিয়েবল এবং গ্রুপ ভ্যারিয়েবল হলো ইনভেন্টরি ফাইলের উপাদান, যা নির্দিষ্ট হোস্ট বা হোস্ট গ্রুপের জন্য কনফিগারেশন বা মান সংরক্ষণ করতে ব্যবহৃত হয়। এগুলো ব্যবহার করে আপনি বিভিন্ন হোস্ট বা গ্রুপের জন্য নির্দিষ্ট কনফিগারেশন তৈরি করতে পারেন, যা প্লেবুক চলাকালে প্রয়োগ করা হয়।
হোস্ট ভ্যারিয়েবল হলো এক বা একাধিক নির্দিষ্ট হোস্টের জন্য সংরক্ষিত ভ্যারিয়েবল। এটি একটি নির্দিষ্ট হোস্টের জন্য নির্দিষ্ট কনফিগারেশন বা ডেটা প্রদান করে। আপনি ইনভেন্টরি ফাইল বা হোস্ট ভ্যারিয়েবল ফাইলে (যেমন: host_vars/hostname.yml
) এই ভ্যারিয়েবলগুলো উল্লেখ করতে পারেন।
ইনভেন্টরি ফাইল:
webserver1 ansible_host=192.168.1.10 ansible_user=admin
উপরের উদাহরণে:
webserver1
এর জন্য IP ঠিকানা 192.168.1.10
এবং ইউজার admin
হিসেবে উল্লেখ করা হয়েছে।বা, হোস্ট ভ্যারিয়েবল ফাইল (host_vars/webserver1.yml
):
---
ansible_host: 192.168.1.10
ansible_user: admin
app_port: 8080
এখানে:
ansible_host
ও ansible_user
হোস্টের জন্য উল্লেখিত হয়েছে।app_port
উল্লেখ করা হয়েছে, যা ঐ নির্দিষ্ট হোস্টে ব্যবহৃত হবে।গ্রুপ ভ্যারিয়েবল হলো একটি নির্দিষ্ট হোস্ট গ্রুপের জন্য সংরক্ষিত ভ্যারিয়েবল। আপনি ইনভেন্টরি ফাইলে গ্রুপের জন্য একটি সেকশন তৈরি করে ভ্যারিয়েবলগুলো উল্লেখ করতে পারেন, অথবা group_vars
ডিরেক্টরির ভেতরে YAML ফাইলে এগুলো সংরক্ষণ করতে পারেন।
ইনভেন্টরি ফাইল:
[webservers]
webserver1 ansible_host=192.168.1.10
webserver2 ansible_host=192.168.1.11
[webservers:vars]
ansible_user=admin
app_port=80
উপরের উদাহরণে:
webservers
গ্রুপের সব হোস্টের জন্য ansible_user
হিসেবে admin
এবং app_port
হিসেবে 80
উল্লেখ করা হয়েছে।বা, গ্রুপ ভ্যারিয়েবল ফাইল (group_vars/webservers.yml
):
---
ansible_user: admin
app_port: 80
db_host: 192.168.1.100
এখানে:
webservers
গ্রুপের সব হোস্টের জন্য ansible_user
এবং app_port
উল্লেখ করা হয়েছে।db_host
যুক্ত করা হয়েছে, যা ঐ গ্রুপের সব হোস্টে প্রযোজ্য হবে।হোস্ট এবং গ্রুপ ভ্যারিয়েবলগুলো Ansible প্লেবুক চলাকালে হোস্ট বা গ্রুপ ভিত্তিক কনফিগারেশন তৈরি করতে ব্যবহৃত হয়। এই ভ্যারিয়েবলগুলো ব্যবহার করে আপনি বিভিন্ন হোস্ট বা গ্রুপের জন্য বিভিন্ন কনফিগারেশন অটোমেটেড করতে পারেন, যা প্লেবুক এবং রোলগুলোর মধ্যে ব্যবহার করা হয়।
উদাহরণ প্লেবুক:
---
- name: Deploy web application
hosts: webservers
become: yes
tasks:
- name: Deploy the application
copy:
src: /path/to/app
dest: /var/www/html
- name: Configure the application port
lineinfile:
path: /etc/app/config
regexp: '^port='
line: "port={{ app_port }}"
উপরের প্লেবুকটি app_port
ভ্যারিয়েবল ব্যবহার করে নির্দিষ্ট গ্রুপ বা হোস্টের জন্য কনফিগারেশন সেট করবে।
এইভাবে, হোস্ট এবং গ্রুপ ভ্যারিয়েবল ব্যবহারে আপনি আপনার ইনফ্রাস্ট্রাকচার এবং প্লেবুকের কনফিগারেশন আরও সহজে পরিচালনা করতে পারবেন।
Ansible এ রেজিস্টার (Register) হলো একটি ফিচার যা টাস্কের আউটপুট বা ফলাফল সংরক্ষণ করে, এবং সেই সংরক্ষিত তথ্যকে পরবর্তী টাস্কে ব্যবহার করতে দেয়। এটি প্লেবুক বা টাস্কে ডায়নামিক অবস্থা নির্ধারণ করতে এবং কন্ডিশনাল অপারেশন চালাতে অত্যন্ত কার্যকর।
register
কিওয়ার্ড ব্যবহার করে আপনি একটি টাস্কের আউটপুটকে একটি ভ্যারিয়েবলে সংরক্ষণ করতে পারেন। সংরক্ষিত এই আউটপুট ভ্যারিয়েবলের মধ্যে বিভিন্ন ডেটা থাকে, যেমন:
changed
বা failed
),---
- name: Example of register usage
hosts: localhost
tasks:
- name: Check if a file exists
stat:
path: /etc/passwd
register: file_check
- name: Display file existence
debug:
msg: "File exists: {{ file_check.stat.exists }}"
stat
মডিউল ব্যবহার করে /etc/passwd
ফাইলটি আছে কিনা তা চেক করা হচ্ছে এবং এর ফলাফল file_check
ভ্যারিয়েবলে সংরক্ষণ করা হচ্ছে।debug
মডিউল ব্যবহার করে file_check
ভ্যারিয়েবল থেকে stat.exists
এর মান যাচাই করা হচ্ছে, যাতে ফাইলটি আছে কিনা তা জানা যায়।register
দিয়ে সংরক্ষিত ভ্যারিয়েবলের মাধ্যমে আপনি পরবর্তী টাস্কে কন্ডিশনাল লজিক প্রয়োগ করতে পারেন, যেমন:
---
- name: Conditional task based on register result
hosts: localhost
tasks:
- name: Check if a file exists
stat:
path: /etc/passwd
register: file_check
- name: Create a file if it does not exist
file:
path: /tmp/example.txt
state: touch
when: not file_check.stat.exists
ব্যাখ্যা:
/etc/passwd
ফাইলটি চেক করা হয়েছে এবং ফলাফল file_check
তে সংরক্ষণ করা হয়েছে।file_check.stat.exists
false
হবে, অর্থাৎ /etc/passwd
ফাইলটি যদি না থাকে। এটি when
কন্ডিশন দিয়ে চেক করা হয়েছে।রেজিস্টার করা ভ্যারিয়েবলের মধ্যে বেশ কিছু সাধারণ ফিল্ড থাকে যা টাস্কের আউটপুট এবং স্ট্যাটাস সংরক্ষণ করে:
true
হবে।true
হবে।---
- name: Command output register example
hosts: localhost
tasks:
- name: Run a shell command
command: echo "Hello, Ansible!"
register: command_output
- name: Display the command output
debug:
msg: "The command output was: {{ command_output.stdout }}"
ব্যাখ্যা:
command_output
ভ্যারিয়েবলে সংরক্ষণ করা হয়েছে।debug
মডিউল দিয়ে সেই আউটপুট দেখানো হয়েছে {{ command_output.stdout }}
এর মাধ্যমে।stdout
, stderr
, changed
) ব্যবহার করে প্লেবুকে কন্ডিশন চেকিং করতে পারেন।এই ভাবে register
এবং এর সাথে সংরক্ষিত ফলাফল ব্যবহার করে Ansible Playbook কে আরো ডায়নামিক এবং ফ্লেক্সিবল করা যায়।
Ansible এ Facts এবং gather_facts হলো এমন উপাদান যা মেশিন বা হোস্টের সিস্টেম ইনফরমেশন সংগ্রহ ও ব্যবহার করতে সাহায্য করে। এগুলো প্লেবুকের কার্যকারিতা ও ডাইনামিক কনফিগারেশনে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে।
Facts হলো মেশিন বা হোস্ট সম্পর্কে বিভিন্ন তথ্য যা Ansible স্বয়ংক্রিয়ভাবে সংগ্রহ করে। এগুলোর মধ্যে অন্তর্ভুক্ত রয়েছে:
Ansible এর setup
মডিউল ডিফল্টভাবে এই ফ্যাক্টগুলো গ্যাদার করে এবং এগুলোকে প্লেবুকে ব্যবহার করার সুযোগ দেয়।
gather_facts হলো একটি প্যারামিটার যা প্লেবুকে সেট করা হয়, এবং এটি নির্দেশ করে যে Ansible প্লেবুক রান করার সময় হোস্ট বা মেশিন থেকে ফ্যাক্টস সংগ্রহ করবে কি না। ডিফল্টভাবে, এটি yes
বা true
হিসেবে সেট করা থাকে, তাই Ansible স্বয়ংক্রিয়ভাবে ফ্যাক্টস গ্যাদার করে।
---
- name: Gather facts example
hosts: all
gather_facts: yes
tasks:
- name: Display OS information
debug:
msg: "The operating system is {{ ansible_distribution }} and version is {{ ansible_distribution_version }}"
উপরের উদাহরণে, gather_facts: yes
থাকায় Ansible হোস্ট থেকে ফ্যাক্টস গ্যাদার করবে এবং ansible_distribution
ও ansible_distribution_version
ফ্যাক্টসের মাধ্যমে অপারেটিং সিস্টেম ও এর ভার্সনের তথ্য প্রদর্শন করবে।
no
বা false
করাকিছু ক্ষেত্রে আপনি ফ্যাক্টস গ্যাদার করতে না চাইলে gather_facts: no
বা false
সেট করতে পারেন। এটি প্লেবুক এক্সিকিউশনকে দ্রুততর করতে পারে যদি ফ্যাক্টসের প্রয়োজন না থাকে।
---
- name: Playbook without gathering facts
hosts: all
gather_facts: no
tasks:
- name: Simple task
debug:
msg: "This is a simple task without gathering facts."
ফ্যাক্ট | বিবরণ |
---|---|
ansible_distribution | হোস্টের অপারেটিং সিস্টেমের নাম |
ansible_distribution_version | অপারেটিং সিস্টেমের ভার্সন |
ansible_hostname | হোস্ট মেশিনের নাম |
ansible_all_ipv4_addresses | সমস্ত IPv4 অ্যাড্রেস |
ansible_processor | প্রসেসরের তথ্য |
ansible_memory_mb | মেমোরি (RAM) সম্পর্কিত তথ্য |
---
- name: Example playbook using facts
hosts: all
gather_facts: yes
tasks:
- name: Display IP address information
debug:
msg: "The IP addresses are: {{ ansible_all_ipv4_addresses }}"
- name: Check if the OS is Ubuntu
debug:
msg: "This is an Ubuntu system."
when: ansible_distribution == "Ubuntu"
এখানে, ansible_all_ipv4_addresses
ব্যবহার করে হোস্টের সমস্ত IPv4 অ্যাড্রেস প্রদর্শন করা হয়েছে এবং when
শর্ত ব্যবহার করে চেক করা হয়েছে হোস্টের অপারেটিং সিস্টেম Ubuntu কিনা।
yes
থাকে।Facts এবং gather_facts এর সঠিক ব্যবহার করে আপনি আপনার Ansible প্লেবুককে আরও কার্যকরী, কাস্টমাইজড এবং ডাইনামিক করতে পারেন।